// 这个文件模块用于管理：拦截器、get和post方法二次封装
import axios from 'axios';
import qs from 'qs'; //vue自带的， stringfiy--对象转查询字符串  parse--查询字符串转对象
import Elementui from "element-ui";
import router from "@/router/index.js"


let baseURL = ''; // 基础地址
if (process.env.NODE_ENV === 'development') {
  // 开发环境，前端解决跨域
  baseURL = '/ujiuye/api';
} else if (process.env.NODE_ENV === 'production') {
  // 生产环境，后端解决跨域
  baseURL = 'http://localhost:3000/api';
}

// 请求拦截
axios.interceptors.request.use((req) => {
  //
  req.headers.authorization = JSON.parse(localStorage.getItem("userinfo")||'{}').token
  return req;
});

// 响应拦截
axios.interceptors.response.use((res) => {
  // 全局错误拦截
  if(res.data.msg == "请设置请求头，并携带验证字符串" || res.data.msg == "登录已过期或访问权限受限"){
    //提示
    Elementui.Message.error(res.data.msg);
    //没登，登录过期 --- 重新登录--跳转到登录页
    setTimeout(()=>{
      router.push("/login");
    },2000)
    
  }
  return res.data || res;
});


/* 
  二次封装get方法
  url：指调取的接口地址
  params：数据参数对象
*/
export const get = (url, params = {}) => {
  return axios.get(baseURL + url, { params});
};

/* 
  二次封装post方法
  url：指调取的接口地址
  params：数据参数对象
  isFile：是否有上传文件，默认不上传文件
*/
export const post = (url, params = {}, isFile = false) => {
  let data = null; // 数据
  if (isFile) {
    // 上传，循环将数据放入到FormData对象中
    data = new FormData();
    for (let attr in params) {
      data.append(attr, params[attr]);
    }
  } else {
    // 没有文件上传，则把数据拼成查询字符串
    data = qs.stringify(params);
  }

  return axios.post(baseURL + url, data);
};


